/**
 * 这是一个自定义的hook，用于在多个浏览器窗口之间同步数据
 */
const channel = new BroadcastChannel('sync_channel')

/**
 * 消息类型枚举
 */
export enum MessageType {
  /**
   * 添加
   */
  'add-emp' = 'add-emp',
  /**
   * 更新
   */
  'update-emp' = 'add-emp'
}

/**
 * 发送消息函数，接收消息类型和消息内容作为参数
 * @param type 消息类型
 * @param message 消息内容
 */
export function sendMsg(type: MessageType, message: any) {
  // 向广播通道发送消息
  channel.postMessage({
    type,
    message
  })
}

/**
 * 监听消息函数，接收回调函数作为参数
 * @param callback 回调函数
 * @returns
 */
export function listenMsg(callback: (event: any) => void) {
  // 定义消息处理函数
  const handle = (e: any) => callback(e.data)
  // 监听广播通道的消息事件
  channel.addEventListener('message', handle)
  // 返回一个函数，用于移除消息事件监听
  return () => channel.removeEventListener('message', handle)
}
